import { Vec3 } from 'cc';
import { StorageName } from './StorageName';
import SdkFactory from './SdkFactory';

// 存储用户数据，只对控制器使用
export default class BaseData {
    // 当前使用的拍子
    public batId = 1;

    // 备份当前拍子（当使用使用拍子的时候）
    public backupBatId = 0;

    // 当前的经验值
    public XP = 0;

    // 分享图信息
    public shareImgList = [];

    // 当前手机系统
    public phoneSystem = 'devtools';

    // 导出信息
    public ADIconDataList = null;

    // 诱导开关
    public shareSwitchList = null;

    // // 当前版本号
    // public version = '';

    // // 当前使用配置表版本号
    // public configVersion = '3.1';

    // 碎片合成可使用的拍子ID
    public chipBatList = [0];

    // 当前的碎片拍子
    public chipBatId = 101;

    // 已收集的碎片数量（总数）
    public batChipCount = 0;

    // 当前关卡收集到的碎片数量
    public passBatChipCount = 0;

    // 增加的碎片掉落概率
    public addChance = 1;

    // 碎片拍子信息
    public chipBatInfo = {};

    // 任务
    public taskData = [];

    // 完成的任务
    public taskList = [];

    // 当前用户拍子最高等级
    public maxBatLV = 1;

    // 登陆数据
    public userData = null;

    // 大招技能数量
    public bigSkillCount = 0;

    // 磁铁技能数量
    public magnetSkillCount = 0;

    // 速度技能数量
    public speedSkillCount = 0;

    // 抽奖次数
    public lottery = 1;

    // 拍子合成数据
    public column = null;

    // 购买蚊拍的次数
    public buyBatCount = 0;

    // 签到的次数
    public signCount = 0;

    // 签到状态
    public isSign = 0;

    // VIP看视频的次数
    public vipVideo = 0;

    // 抽奖看视频的次数
    public lotteryVideo = 0;

    // 视频收益
    public profitVideo = 0;

    // 头像的使用
    public headIconId = 1;

    // 当局消灭蚊子的数量
    public enemyCount = 0;

    // 每种拍子购买的次数
    public batCountList = [];

    // 拍子的位置
    public batPos = null;

    // 第一个障碍物
    public obstacleStatus = false;

    // 自动合成状态(当天有效)
    public mixBatStatus = false;

    // 分享视频的次数
    // public shareVideoCount = 0;

    // 赛道长度
    public roadLength = 0;

    // 小程序引导弹窗状态(false：没有领取，true：已经领取)
    public reminderStatus = false;

    // 新手引导
    public isTips = 1;

    // 用户当前的位置(1:大厅/2:游戏房间)
    public isHome = 1;

    // 离拍子最近的复活点
    public reborm = null;

    // 已加载的地图
    public loadMapID = 0;

    // 应用标识
    public appName = 'wx';

    // 游戏通关状态(0：通关失败，1：通关成功，2：默认状态)
    public gamePassState = 2;

    // 是否使用磁贴功能
    public magnetState = false;

    // 在天空上
    public flyState = false;

    // 已解锁的神秘拍子id
    public unlockChipBatId = 100;


    // =========================== 新项目（画X）==============================

    // 当前版本号
    // public version = '1.0.1';

    // 当前使用配置表版本号（1：微信配置表，2：头条配置表，3：魅族配置表）
    // public configVersion = '1.0.1';
    // public configVersion = '2.0.1';
    // public configVersion = '3.0.1';

    // 微信ID
    // public AppID = 'ttf4ae82136b94b192';
    // // 头条ID
    // public AppID = 'ttf4ae82136b94b192';
    // // 魅族ID（从管理后台的 ==> 游戏列表中获取）
    // public AppID = 'meizu_20200716huax';

    // // cocos埋点状态
    // public cocosState = true;

    // // 阿拉丁埋点状态
    // public aldState = false;

    // // 头条埋点状态
    // public toutiaoState = false;

    // 主角武器的点
    public armsPosList = [];

    // 主角的位置
    public playerPos = new Vec3();

    // AI的头像id
    public AIIconList = [];

    // 主角当前用的皮肤
    public playerSkill = 1;

    // 主角当前的人物模型
    public playerModel = 1;

    // 主角试用模型
    public playerTryModel = 0;

    // 主角在本局中的排名
    public ranking = 1;

    // // 关卡数
    // public passID = 1;

    // // 金币数
    // public gold = 0;

    // // 配置表
    // public GameConfig = null;

    // // 用户open_id
    // public openID: string = '';

    // 本局中击败的AI数量
    public beatAICount = 0;

    // 当天视频分享次数
    public shareVideoCount = 0;

    // 武器长度
    public armsLength = 60;

    // 试用皮肤
    public trySkill = 0;

    // 用户当前场景（1：大厅，2：游戏中）
    public sceenState = 1;

    // 统计各个AI和主角击杀数量
    public attackList = [];

    // 游戏状态
    public gameState = true;

    // 已有皮肤
    public skillList = [1];

    // 主角的形体大小
    public playerSize = 20;

    // 主角的移动速度
    public playerSpeed = 7;

    // 主角击败一个AI获取到的金币数量
    public playerGold = 100;

    // 主角灵活度
    public playerQuick = 10;

    // 主角的攻击力
    public playerAttack = 5;

    // 主角当前的武器等级
    // public playerArmsLevel = 1;

    // 主角的画笔颜色
    public penColorId = 1;

    // 已有的笔颜色
    public penList = [1];

    // 试用皮肤状态(用完：false，可用：true)
    public trySkillState = false;

    // 菜单中的皮肤
    public eggsList = [0, 0, 0, 0];

    // 未解锁的皮肤ID
    public lockedSkillId = 2;

    // 分享视频获取到的皮肤
    public videoTrySkill = 0;

    // =============================== 武炼仙踪 =========================
    // 关卡数
    public passID = 1;

    // 金币数
    public gold = 0;

    // 钻石数
    public diamonds = 0;

    // 体力数
    public power = 0;

    // 配置表
    public GameConfig = null;

    // 用户open_id
    public openID: string = '';

    public init(data?: any) {
        if (data) {
            this.shareImgList = data.share_img || [];
            this.openID = data.open_id || this.openID;
            this.isTips = data.is_tips || this.isTips;
            this.penColorId = data.weapon || this.penColorId;
            this.passID = data.pass || this.passID;
            this.gold = parseInt(data.gold) || Math.round(this.gold);
            this.diamonds = parseInt(data.diamonds) || Math.round(this.diamonds);
            this.power = parseInt(data.power) || Math.round(this.power);

            const column_skins = data.column_skins ? JSON.parse(data.column_skins) : null;
            const column_weapon = data.column_weapon ? JSON.parse(data.column_weapon) : null;
            const column_other = data.column_other ? JSON.parse(data.column_other) : null;

            this.playerModel = this._isExistence(column_skins, 'player_model', this.playerModel);
            this.playerTryModel = this._isExistence(column_skins, 'player_try_model', this.playerTryModel);
            this.playerSkill = this._isExistence(column_skins, 'player_skill', this.playerSkill);
            this.trySkill = this._isExistence(column_skins, 'player_try_skill', this.trySkill);
            this.skillList = this._isExistence(column_skins, 'player_skill_list', this.skillList);
            this.playerSize = this._isExistence(column_skins, 'player_size', this.playerSize);
            this.playerSpeed = this._isExistence(column_skins, 'player_speed', this.playerSpeed);
            this.playerGold = this._isExistence(column_skins, 'player_gold', this.playerGold);
            this.playerAttack = this._isExistence(column_skins, 'player_attack', this.playerAttack);
            this.eggsList = this._isExistence(column_skins, 'eggs_list', this.eggsList);
            this.lockedSkillId = this._isExistence(column_skins, 'locked_skill_id', this.lockedSkillId);
            this.penList = this._isExistence(column_weapon, 'pen_color_list', this.penList);
            this.armsLength = this._isExistence(column_weapon, 'arms_length', this.armsLength);
            this.shareVideoCount = this._isExistence(column_other, 'share_video_count', this.shareVideoCount);
        }
        this.saveStorage();
    }

    private _isExistence(data, key, value) {
        if (data != null) {
            if (data.hasOwnProperty(key)) {
                return data[key];
            } else {
                return value;
            }
        } else {
            return value;
        }
    }

    // 本地存储
    public saveStorage() {
        const a = {
            // openID
            open_id: this.openID,

            // 新手引导状态
            is_tips: this.isTips,

            // 金币
            gold: this.gold,

            // 关卡
            pass: this.passID,

            // 当前武器等级
            weapon: this.penColorId,

            // 武器数据
            column_weapon: JSON.stringify({
                // 已有颜色
                "pen_color_list": this.penList,

                // 武器长度
                "arms_length": this.armsLength,
            }),

            // 玩家皮肤数据
            column_skins: JSON.stringify({
                // 玩家当前模型
                "player_model": this.playerModel,

                // 玩家试用模型
                "player_try_model": this.playerTryModel,

                // 玩家当前皮肤
                "player_skill": this.playerSkill,

                // 玩家试用皮肤
                "player_try_skill": this.trySkill,

                // 玩家已有皮肤
                "player_skill_list": this.skillList,

                // 玩家体型大小
                "player_size": this.playerSize,

                // 玩家速度
                "player_speed": this.playerSpeed,

                // 玩家金币
                "player_gold": this.playerGold,

                // 玩家攻击力
                "player_attack": this.playerAttack,

                // 彩蛋中的皮肤
                "eggs_list": this.eggsList,

                // 未解锁的皮肤id
                "locked_skill_id": this.lockedSkillId,
            }),

            // 地图数据
            column_map: JSON.stringify({}),

            // 其他数据
            column_other: JSON.stringify({
                "share_video_count": this.shareVideoCount,
            }),
        };

        this._setLocalStorage({ key: StorageName.GAME_DATA, value: a });
    }

    private _setLocalStorage(data) {
        // if (cc.sys.platform == cc.sys.WECHAT_GAME) {
        //     SdkFactory.getInstance().SdkAPI.setStorage(data.key, data.value);
        // } else {
        //     cc.sys.localStorage.setItem(data.key, JSON.stringify(data.value));
        // }
    }
}